/**
 * 计算甘特图的开始时间
 * 
 * @description 动态计算开始时间 (Date对象)，确保 K时刻 (当前时间) 位于时间轴中间，且包含所有数据
 * @param ganttData - 甘特图数据对象
 * @param selectedTopScale - 顶层刻度选择
 * @param minMaxTime - 最小/最大时间范围
 * @returns 开始时间的 Date 对象
 */

import { computed, ComputedRef, Ref } from 'vue'
import { GanttData, TimeRange } from './types'

export function useStartDateTime(
  ganttData: GanttData,
  selectedTopScale: Ref<string>,
  minMaxTime: ComputedRef<TimeRange | null>
): ComputedRef<Date> {
  return computed(() => {
    const timeStr = ganttData.simulation.currentTime
    if (!timeStr) return new Date()

    const d = new Date(timeStr.replace(/-/g, '/'))
    if (isNaN(d.getTime())) return new Date()

    // 基础视窗大小 (ms)
    const map: Record<string, number> = {
      '1天': 24, '2天': 48, '3天': 72, '1周': 168
    }
    const baseHours = map[selectedTopScale.value] || 24
    const halfRangeMs = (baseHours / 2) * 60 * 60 * 1000

    // 默认起始时间
    let startMs = d.getTime() - halfRangeMs

    // 自动扩展：如果数据更早，则延伸起始时间 (留1小时余量)
    if (minMaxTime.value && minMaxTime.value.min < startMs) {
      startMs = minMaxTime.value.min - (1 * 60 * 60 * 1000)
    }

    return new Date(startMs)
  })
}
